package com.zjsru.plan2024.oneday;

/**
 * 2864. 最大二进制奇数
 * @Author: cookLee
 * @Date: 2024-03-13
 */
public class MaximumOddBinaryNumber {

    /**
     * 主
     * \
     * 输入：s = "010"
     * 输出："001"
     * 解释：因为字符串 s 中仅有一个 '1' ，其必须出现在最后一位上。所以答案是 "001" 。
     * \
     * 输入：s = "0101"
     * 输出："1001"
     * 解释：其中一个 '1' 必须出现在最后一位上。而由剩下的数字可以生产的最大数字是 "100" 。所以答案是 "1001" 。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        MaximumOddBinaryNumber maximumOddBinaryNumber = new MaximumOddBinaryNumber();
        String s = "0101";
        System.out.println(maximumOddBinaryNumber.maximumOddBinaryNumber(s));
    }

    /**
     * 二进制最大奇数:贪心
     *
     * @param s s
     * @return {@link String}
     */
    public String maximumOddBinaryNumber(String s) {
        //获取s字符串里所有1的数量
        int cnt = 0;
        for (char c : s.toCharArray()) {
            int sub = c - '0';
            cnt += sub;
        }
        StringBuilder sb = new StringBuilder();
        //留下一个1 其他的1都放到字符串的最前面
        for (int i = 0; i < cnt - 1; i++) {
            sb.append(1);
        }
        //剩余位数补充0
        for (int i = 0; i < s.length() - cnt; i++) {
            sb.append(0);
        }
        //补充最后一位数1
        sb.append(1);
        return sb.toString();
    }


}
